#ifndef __ALMACENAMIENTO_INDICE_H__
#define __ALMACENAMIENTO_INDICE_H__

#include "global.h"
#include "RegistroIndice.h"

#include <string.h>
#include <sstream>
#include <stdio.h>
#include <string>

#define NOMBRE_ARCHIVO_INDICE "indice"

using namespace std;

class AlmacenamientoIndice
{
	private:
		char * nombreArchivoAlmInd;
		FILE * archivoIndice;
		bool destroy;
		char modo[2];
		int cantRegistros;
		// Indica si el archivo sera eliminado por el destructor
		static int codigoArchivo;
		static int codigoArchivoNivel1;

	public:
		AlmacenamientoIndice(char * modo, int nivel, bool parcial = false);
		// parcial tiene que valer true durante la creacion del
		// indice para asignar correctamente los subindices a los nombres de archivo
		// para lectura del archivo final (en las consultas) no es necesario
		// especificar el valor ya que se usa el default
		// Si se usa modo RENAME parcial no puede valer true
		virtual ~AlmacenamientoIndice();
		
		RegistroIndice * leerRegistroIndice(int posicion);
		RegistroIndice * leerSiguiente();
		void escribirRegistroIndice(RegistroIndice * regIndice);
		static void resetearCodigoArchivo();
		static void resetearCodigoArchivoNivel1();
		static int getCodigoArchivo();
		void setDestroy();
		void abrirArchivo ();
		void renombrarArchivoFinal();
		void renombrarArchivoANivel(char * nivel);
		int getCantidadRegistros();
};

#endif
